package cn.sw.system.menu.service.impl;

import cn.sw.common.database.architecture.service.impl.BaseServiceImpl;
import cn.sw.common.database.domain.entity.Menu;
import cn.sw.common.database.domain.dto.form.MenuFormDto;
import cn.sw.common.database.domain.dto.query.MenuQueryDto;
import cn.sw.common.database.domain.vo.tree.MenuTreeVo;
import cn.sw.common.database.domain.vo.vo.MenuVo;
import cn.sw.common.http.HttpResponse;

import cn.sw.common.utils.Mapper;
import cn.sw.common.utils.TreeUtil;
import cn.sw.system.menu.mapper.MenuMapper;
import cn.sw.system.menu.service.MenuService;
import com.alibaba.cloud.commons.lang.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;


/**
 * 菜单表 服务实现类
 *
 * @author 张众森 (个人博客:https://)
 * @date 2025-05-09
 * @tags 做一个优秀的全栈架构
 */
@Service
public class MenuServiceImpl extends BaseServiceImpl<MenuMapper, Menu, MenuFormDto, MenuQueryDto, MenuVo> implements MenuService {

    @Resource
    private MenuMapper menuMapper;

    @Override
    public HttpResponse<?> tree(MenuQueryDto query) throws Exception {
        Menu map = Mapper.map(query, Menu.class);
        String id = StringUtils.isEmpty(map.getId()) ? "0" : map.getId();
        List<Menu> menus = menuMapper.selectRecursiveChildren(id);
        // 构建原始树结构
        List<Menu> tree = TreeUtil.buildTree(menus);
        // 判断是否有 id = "0" 的节点，并提取其子节点
        if (!tree.isEmpty() && "0".equals(tree.get(0).getId())) {
            tree = tree.get(0).getChildren(); // 提取子节点，替代根节点
        }
        // 映射为 VO 树形结构
        List<MenuTreeVo> voTree = Mapper.mapTree(tree, MenuTreeVo.class);

        return HttpResponse.ok(voTree);
    }


}



